# -*- coding: utf-8 -*-
"""
API接口适配器

这个模块提供了简化的API接口处理，主要用于响应前端请求
并返回基本的成功/失败状态，而不需要实际处理数据逻辑
"""

from flask import Blueprint, jsonify, request, current_app
from functools import wraps
import time
import logging

# 设置日志
logger = logging.getLogger(__name__)

# 创建蓝图
api_adapter = Blueprint('api_adapter', __name__)

# 认证装饰器
def token_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        token = None
        auth_header = request.headers.get('Authorization')
        
        if auth_header:
            if auth_header.startswith('Bearer '):
                token = auth_header.split(' ')[1]
        
        if not token:
            return jsonify({
                'code': 401,
                'message': '缺少token'
            }), 401
        
        # 简化的token验证，只检查是否存在token
        # 在实际应用中，这里应该验证token的有效性
        try:
            # 假设后端不进行实际令牌验证
            current_app.logger.info(f"接收到API请求，令牌: {token[:10]}...")
            return f(*args, **kwargs)
        except Exception as e:
            current_app.logger.error(f"令牌验证错误: {str(e)}")
            return jsonify({
                'code': 401,
                'message': '无效token'
            }), 401
            
    return decorated

# 通用响应生成器
def make_success_response(data=None, message="操作成功"):
    """生成标准成功响应"""
    response = {
        'status': 'success',
        'message': message,
        'timestamp': time.strftime('%Y-%m-%dT%H:%M:%S')
    }
    
    if data is not None:
        response['data'] = data
        
    return jsonify(response)

def make_error_response(message="操作失败", code=400):
    """生成标准错误响应"""
    return jsonify({
        'status': 'error',
        'code': code,
        'message': message,
        'timestamp': time.strftime('%Y-%m-%dT%H:%M:%S')
    }), code

# 设备模块接口
@api_adapter.route('/device/status', methods=['GET'])
@token_required
def device_status():
    """获取设备状态 - 只返回成功状态，"""
    logger.info("处理设备状态请求")
    return make_success_response(message="设备状态请求成功")

@api_adapter.route('/device/list', methods=['GET'])
@token_required
def device_list():
    """获取设备列表 - 只返回成功状态，"""
    logger.info("处理设备列表请求")
    return make_success_response(message="设备列表请求成功")

# 数据模块接口
@api_adapter.route('/data/today', methods=['GET'])
@token_required
def data_today():
    """获取今日数据 - 只返回成功状态，"""
    device_id = request.args.get('deviceId')
    if not device_id:
        return make_error_response("缺少设备ID参数")
    
    logger.info(f"处理今日数据请求，设备ID: {device_id}")
    return make_success_response(message=f"今日数据请求成功，设备ID: {device_id}")

@api_adapter.route('/data/history', methods=['GET'])
@token_required
def data_history():
    """获取历史数据 - 只返回成功状态，"""
    device_id = request.args.get('deviceId')
    days = request.args.get('days', '7')
    
    if not device_id:
        return make_error_response("缺少设备ID参数")
        
    try:
        days = int(days)
    except ValueError:
        return make_error_response("天数必须是整数")
    
    logger.info(f"处理历史数据请求，设备ID: {device_id}, 天数: {days}")
    return make_success_response(
        message=f"历史数据请求成功，设备ID: {device_id}, 天数: {days}"
    )

# 仪表盘模块接口
@api_adapter.route('/dashboard/overview', methods=['GET'])
@token_required
def dashboard_overview():
    """获取仪表盘概览 - 只返回成功状态，"""
    logger.info("处理仪表盘概览请求")
    return make_success_response(message="仪表盘概览请求成功")

@api_adapter.route('/dashboard/stats', methods=['GET'])
@token_required
def dashboard_stats():
    """获取仪表盘统计 - 只返回成功状态，"""
    logger.info("处理仪表盘统计请求")
    return make_success_response(message="仪表盘统计请求成功")

@api_adapter.route('/dashboard/alerts', methods=['GET'])
@token_required
def dashboard_alerts():
    """获取仪表盘告警数据 - 只返回成功状态，"""
    logger.info("处理仪表盘告警请求")
    return make_success_response(message="仪表盘告警请求成功")

@api_adapter.route('/dashboard/device-status', methods=['GET'])
@token_required
def dashboard_device_status():
    """获取仪表盘设备状态 - 只返回成功状态，"""
    logger.info("处理仪表盘设备状态请求")
    return make_success_response(message="仪表盘设备状态请求成功")

# 用户模块接口
@api_adapter.route('/users', methods=['GET'])
@token_required
def users_list():
    """获取用户列表 - 只返回成功状态，"""
    logger.info("处理用户列表请求")
    return make_success_response(message="用户列表请求成功")

@api_adapter.route('/users/current', methods=['GET'])
@token_required
def current_user():
    """获取当前用户信息 - 只返回成功状态，"""
    logger.info("处理当前用户请求")
    return make_success_response(message="当前用户请求成功")

# 注册适配器蓝图
def register_api_adapter(app):
    """注册API适配器蓝图到Flask应用"""
    app.register_blueprint(api_adapter, url_prefix='/api')
    logger.info("注册API适配器蓝图完成")
